<!-- HTML header for doxygen 1.8.3.1-->
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
<meta name="generator" content="Doxygen 1.8.3.1"/>
<title>AngelScript: Using namespaces</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
<script type="test/javascript" src="touch.js"></script>
<link href="navtree.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="resize.js"></script>
<script type="text/javascript" src="navtree.js"></script>
<script type="text/javascript">
  $(document).ready(initResizable);
  $(window).load(resizeHeight);
</script>
<link href="search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="search/search.js"></script>
<script type="text/javascript">
  $(document).ready(function() { searchBox.OnSelectItem(0); });
</script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
</head>
<body>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
 <tbody>
 <tr style="height: 56px;">
  <td id="projectlogo"><img alt="Logo" src="aslogo_small.png"/></td>
  <td style="padding-left: 0.5em;">
   <div id="projectname">AngelScript
   </div>
  </td>
   <td>        <div id="MSearchBox" class="MSearchBoxInactive">
        <span class="left">
          <img id="MSearchSelect" src="search/mag_sel.png"
               onmouseover="return searchBox.OnSearchSelectShow()"
               onmouseout="return searchBox.OnSearchSelectHide()"
               alt=""/>
          <input type="text" id="MSearchField" value="Search" accesskey="S"
               onfocus="searchBox.OnSearchFieldFocus(true)" 
               onblur="searchBox.OnSearchFieldFocus(false)" 
               onkeyup="searchBox.OnSearchFieldChange(event)"/>
          </span><span class="right">
            <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
          </span>
        </div>
</td>
 </tr>
 </tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.3.1 -->
<script type="text/javascript">
var searchBox = new SearchBox("searchBox", "search",false,'Search');
</script>
</div><!-- top -->
<div id="side-nav" class="ui-resizable side-nav-resizable">
  <div id="nav-tree">
    <div id="nav-tree-contents">
      <div id="nav-sync" class="sync"></div>
    </div>
  </div>
  <div id="splitbar" style="-moz-user-select:none;" 
       class="ui-resizable-handle">
  </div>
</div>
<script type="text/javascript">
$(document).ready(function(){initNavTree('doc_adv_namespace.html','');});
</script>
<div id="doc-content">
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
     onmouseover="return searchBox.OnSearchSelectShow()"
     onmouseout="return searchBox.OnSearchSelectHide()"
     onkeydown="return searchBox.OnSearchSelectKey(event)">
<a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(0)"><span class="SelectionMark">&#160;</span>All</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(1)"><span class="SelectionMark">&#160;</span>Classes</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(2)"><span class="SelectionMark">&#160;</span>Files</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(3)"><span class="SelectionMark">&#160;</span>Functions</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(4)"><span class="SelectionMark">&#160;</span>Variables</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(5)"><span class="SelectionMark">&#160;</span>Typedefs</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(6)"><span class="SelectionMark">&#160;</span>Enumerations</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(7)"><span class="SelectionMark">&#160;</span>Enumerator</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(8)"><span class="SelectionMark">&#160;</span>Macros</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(9)"><span class="SelectionMark">&#160;</span>Pages</a></div>

<!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow">
<iframe src="javascript:void(0)" frameborder="0" 
        name="MSearchResults" id="MSearchResults">
</iframe>
</div>

<div class="header">
  <div class="headertitle">
<div class="title">Using namespaces </div>  </div>
</div><!--header-->
<div class="contents">
<div class="textblock"><p>Namespaces can be used to group related functions and other entities together. Doing so avoids potential conflicts with other entities that happen to use the same name, but is otherwise unrelated.</p>
<p>Namespaces can be used in the application registered interface, as well as in the <a class="el" href="doc_global_namespace.html">scripts</a>.</p>
<h1><a class="anchor" id="doc_adv_namespace_reg"></a>
Registering the interface with namespaces</h1>
<p>To register a function, or other entity in a specific namespace, the application should first call the method <a class="el" href="classas_i_script_engine.html#a605f114814f1f64804c04391816d948b">SetDefaultNamespace</a> to define the desired namespace. After that the registration follows the normal procedure as described in the <a class="el" href="doc_register_api_topic.html">chapter on registering the interface</a>.</p>
<div class="fragment"><div class="line"><span class="keywordtype">void</span> RegisterInNamespace(<a class="code" href="classas_i_script_engine.html" title="The engine interface.">asIScriptEngine</a> *engine)</div>
<div class="line">{</div>
<div class="line">  <span class="keywordtype">int</span> r;</div>
<div class="line"></div>
<div class="line">  <span class="comment">// Register the type and function in the namespace</span></div>
<div class="line">  r = engine-&gt;<a class="code" href="classas_i_script_engine.html#a605f114814f1f64804c04391816d948b" title="Sets the current default namespace for registrations and searches.">SetDefaultNamespace</a>(<span class="stringliteral">&quot;myspace&quot;</span>); assert( r &gt;= 0 );</div>
<div class="line">  r = engine-&gt;<a class="code" href="classas_i_script_engine.html#a29c6c087c8c5b5cdb6271cfd161cc5a6" title="Registers a new object type.">RegisterObjectType</a>(<span class="stringliteral">&quot;mytype&quot;</span>, 0, <a class="code" href="angelscript_8h.html#a855d86fa9ee15b9f75e553ee376b5c7aa9450e038342b36c745858d2e5ae4b861" title="A reference type.">asOBJ_REF</a>); assert( r &gt;= 0 );</div>
<div class="line">  r = engine-&gt;<a class="code" href="classas_i_script_engine.html#a2f84b9b51733f22c68b8448b02c2f1c7" title="Registers a global function.">RegisterGlobalFunction</a>(<span class="stringliteral">&quot;void myfunc()&quot;</span>, <a class="code" href="angelscript_8h.html#a78f8f2c7f1c88b12e74a5ac47b4184ae" title="Returns an asSFuncPtr representing the function specified by the name.">asFUNCTION</a>(myfunc), <a class="code" href="angelscript_8h.html#a3ec92ea3c4762e44c2df788ceccdd1e4a68ae43cc91cdfc3fa4590c9e6164e4f4" title="A cdecl function.">asCALL_CDECL</a>); assert( r &gt;= 0 );</div>
<div class="line">}</div>
</div><!-- fragment --><p>If desired nested namespaces can also be used by separating them with the scoping token, ::, e.g. SetDefaultNamespace("outer::inner");</p>
<h1><a class="anchor" id="doc_adv_namespace_enum"></a>
Finding entities in namespaces</h1>
<p>As namespaces allow multiple declarations with the same signature, it is necessary to specify in which namespace a search for an entity is to be done. This is also done with the SetDefaultNamespace method. This applies to both the <a class="el" href="classas_i_script_engine.html#a605f114814f1f64804c04391816d948b">engine</a> and the <a class="el" href="classas_i_script_module.html#ab8629af79cee8212d0d244314d36f42a">module</a> interfaces.</p>
<div class="fragment"><div class="line"><span class="keywordtype">void</span> FindFuncInNamespace(<a class="code" href="classas_i_script_module.html" title="The interface to the script modules.">asIScriptModule</a> *module)</div>
<div class="line">{</div>
<div class="line">  <span class="keywordtype">int</span> r;</div>
<div class="line"></div>
<div class="line">  <span class="comment">// Look for the function in the namespace, i.e. myspace::myfunc</span></div>
<div class="line">  r = module-&gt;<a class="code" href="classas_i_script_module.html#ab8629af79cee8212d0d244314d36f42a" title="Sets the default namespace that should be used in the following calls.">SetDefaultNamespace</a>(<span class="stringliteral">&quot;myspace&quot;</span>); assert( r &gt;= 0 );</div>
<div class="line">  <a class="code" href="classas_i_script_function.html" title="The interface for a script function description.">asIScriptFunction</a> *func1 = module-&gt;<a class="code" href="classas_i_script_module.html#a81d727c9677b683942b6087df4ce95ad" title="Returns the function by its name.">GetFunctionByName</a>(<span class="stringliteral">&quot;myfunc&quot;</span>);</div>
<div class="line"></div>
<div class="line">  <span class="comment">// When searching for a matching declaration the default namespace is also</span></div>
<div class="line">  <span class="comment">// used unless an explicit namespace is given in the declaration itself.</span></div>
<div class="line">  <a class="code" href="classas_i_script_function.html" title="The interface for a script function description.">asIScriptFunction</a> *funcA = module-&gt;<a class="code" href="classas_i_script_module.html#ab4754d55d8667aefbed135b4794d461b" title="Returns the function by its declaration.">GetFunctionByDecl</a>(<span class="stringliteral">&quot;void myfunc()&quot;</span>);</div>
<div class="line">  <a class="code" href="classas_i_script_function.html" title="The interface for a script function description.">asIScriptFunction</a> *funcB = module-&gt;<a class="code" href="classas_i_script_module.html#ab4754d55d8667aefbed135b4794d461b" title="Returns the function by its declaration.">GetFunctionByDecl</a>(<span class="stringliteral">&quot;void myspace::myfunc()&quot;</span>);</div>
<div class="line"></div>
<div class="line">  assert( funcA == funcB );</div>
<div class="line">}</div>
</div><!-- fragment --> </div></div><!-- contents -->
</div><!-- doc-content -->
<!-- start footer part -->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
  <ul>
    <li class="footer">Generated on Sun Dec 18 2016 12:35:27 for AngelScript by
    <a href="http://www.doxygen.org/index.html">
    <img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.3.1 </li>
  </ul>
</div>
</body>
</html>
